<?php

/**
 * commentaire actions.
 *
 * @package    appcemhti
 * @subpackage commentaire
 * @author     Steve Cancès
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class commentaireActions extends sfActions
{
    
    protected function droitEcriture()
    {
        $droitUtilisateur = $this->lot->idDroitSurLot($this->getUser()->getGuardUser()->getId());
        $this->forwardUnless($droitUtilisateur == 3, 'sfGuardAuth', 'secure');
    }

  
    public function executeNewCommentaireLot(sfWebRequest $request)
    {
        $this->forward404Unless($this->lot = Doctrine_Core::getTable('lot')->find(array($request->getParameter('id_lot'))), sprintf('Object lot does not exist (%s).', $request->getParameter('id_lot')));
        
        // On vérifie que l'utilisateur a les droits d'écriture sur le lot concerné
        $this->droitEcriture();
        
        $this->commentaire = new Commentaire();
        $this->commentaire->setIdLot($this->lot->getIdLot());
        $this->commentaire->setIdUser($this->getUser()->getGuardUser()->getId());
        $this->form = new commentaireForm($this->commentaire);
    }

    public function executeCreateCommentaireLot(sfWebRequest $request)
    {
        $this->forward404Unless($request->isMethod(sfRequest::POST));
        $this->forward404Unless($this->lot = Doctrine_Core::getTable('lot')->find(array($request->getParameter('id_lot'))), sprintf('Object lot does not exist (%s).', $request->getParameter('id_lot')));
        
        // On vérifie que l'utilisateur a les droits d'écriture sur le lot concerné
        $this->droitEcriture();
        
        $this->commentaire = new Commentaire();
        $this->commentaire->setIdLot($this->lot->getIdLot());
        $this->commentaire->setIdUser($this->getUser()->getGuardUser()->getId());
        $this->form = new commentaireForm($this->commentaire);

        $this->processFormCommentaireLot($request, $this->form);

        $this->setTemplate('newCommentaireLot');
    }
   
    
    protected function processFormCommentaireLot(sfWebRequest $request, sfForm $form)
    {
        $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
        if ($form->isValid())
        {
            if($form->getObject()->isNew()) $new = true; else $new = false;
            
            $commentaire = $form->save();
            if($new == true)
            {
                $commentaire->setCreatedAt(date('Y-m-d H:i:s', time()));
                $commentaire->setIdUser($this->getUser()->getGuarduser()->getId());
                $commentaire->setIdLot($this->lot->getIdLot());
            }
            $commentaire->setUpdatedAt(date('Y-m-d H:i:s', time()));
            $commentaire->save();


            $this->redirect('lot/show?id_lot='.$this->lot->getIdLot());
        }
    }
    
    public function executeNewCommentaireEchantillon(sfWebRequest $request)
    {
        $this->forward404Unless($this->echantillon = Doctrine_Core::getTable('echantillon')->find(array($request->getParameter('id_echantillon'))), sprintf('Object echantillon does not exist (%s).', $request->getParameter('id_echantillon')));
        
        $this->lot = $this->echantillon->getLot();
        // On vérifie que l'utilisateur a les droits d'écriture sur le lot concerné
        $this->droitEcriture();
        
        $this->commentaire = new Commentaire();
        $this->commentaire->setIdEchantillon($this->echantillon->getIdEchantillon());
        $this->commentaire->setIdUser($this->getUser()->getGuardUser()->getId());
        $this->form = new commentaireForm($this->commentaire);
    }
    
    public function executeCreateCommentaireEchantillon(sfWebRequest $request)
    {
        $this->forward404Unless($request->isMethod(sfRequest::POST));

        $this->forward404Unless($this->echantillon = Doctrine_Core::getTable('echantillon')->find(array($request->getParameter('id_echantillon'))), sprintf('Object echantillon does not exist (%s).', $request->getParameter('id_echantillon')));
        
        $this->lot = $this->echantillon->getLot();
        // On vérifie que l'utilisateur a les droits d'écriture sur le lot concerné
        $this->droitEcriture();
        
        $this->commentaire = new Commentaire();
        $this->commentaire->setIdEchantillon($this->echantillon->getIdEchantillon());
        $this->commentaire->setIdUser($this->getUser()->getGuardUser()->getId());
        $this->form = new commentaireForm($this->commentaire);

        $this->processFormCommentaireEchantillon($request, $this->form);

        $this->setTemplate('newCommentaireEchantillon');
    }
    
    protected function processFormCommentaireEchantillon(sfWebRequest $request, sfForm $form)
    {
        $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
        if ($form->isValid())
        {
            if($form->getObject()->isNew()) $new = true; else $new = false;
            
            $commentaire = $form->save();
            if($new == true)
            {
                $commentaire->setCreatedAt(date('Y-m-d H:i:s', time()));
                $commentaire->setIdUser($this->getUser()->getGuarduser()->getId());
                $commentaire->setIdEchantillon($this->echantillon->getIdEchantillon());
            }
            $commentaire->setUpdatedAt(date('Y-m-d H:i:s', time()));
            $commentaire->save();


            $this->redirect('echantillon/show?id_echantillon='.$this->echantillon->getIdEchantillon());
        }
    }
    
    
    public function executeNewCommentaireTraitement(sfWebRequest $request)
    {
        $this->forward404Unless($this->traitement = Doctrine_Core::getTable('traitement')->find(array($request->getParameter('id_traitement'))), sprintf('Object traitement does not exist (%s).', $request->getParameter('id_traitement')));
        
        $this->lot = $this->traitement->getLotParent();
        // On vérifie que l'utilisateur a les droits d'écriture sur le lot concerné
        $this->droitEcriture();
        
        $this->commentaire = new Commentaire();
        $this->commentaire->setIdTraitement($this->traitement->getIdTraitement());
        $this->commentaire->setIdUser($this->getUser()->getGuardUser()->getId());
        $this->form = new commentaireForm($this->commentaire);
    }
    
    public function executeCreateCommentaireTraitement(sfWebRequest $request)
    {
        $this->forward404Unless($request->isMethod(sfRequest::POST));

        $this->forward404Unless($this->traitement = Doctrine_Core::getTable('traitement')->find(array($request->getParameter('id_traitement'))), sprintf('Object traitement does not exist (%s).', $request->getParameter('id_traitement')));
        
        $this->lot = $this->traitement->getLotParent();
        // On vérifie que l'utilisateur a les droits d'écriture sur le lot concerné
        $this->droitEcriture();
        
        $this->commentaire = new Commentaire();
        $this->commentaire->setIdTraitement($this->traitement->getIdTraitement());
        $this->commentaire->setIdUser($this->getUser()->getGuardUser()->getId());
        $this->form = new commentaireForm($this->commentaire);

        $this->processFormCommentaireTraitement($request, $this->form);

        $this->setTemplate('newCommentaireTraitement');
    }
    
    protected function processFormCommentaireTraitement(sfWebRequest $request, sfForm $form)
    {
        $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
        if ($form->isValid())
        {
            if($form->getObject()->isNew()) $new = true; else $new = false;
            
            $commentaire = $form->save();
            if($new == true)
            {
                $commentaire->setCreatedAt(date('Y-m-d H:i:s', time()));
                $commentaire->setIdUser($this->getUser()->getGuarduser()->getId());
                $commentaire->setIdTraitement($this->traitement->getIdTraitement());
            }
            $commentaire->setUpdatedAt(date('Y-m-d H:i:s', time()));
            $commentaire->save();


            $this->redirect('traitement/show?id_traitement='.$this->traitement->getIdTraitement());
        }
    }
    
    
    public function executeNewCommentaireMesure(sfWebRequest $request)
    {
        $this->forward404Unless($this->mesure = Doctrine_Core::getTable('mesure')->find(array($request->getParameter('id_mesure'))), sprintf('Object mesure does not exist (%s).', $request->getParameter('id_mesure')));
        
        $this->lot = $this->mesure->getEchantillon()->getLot();
        // On vérifie que l'utilisateur a les droits d'écriture sur le lot concerné
        $this->droitEcriture();
        
        $this->commentaire = new Commentaire();
        $this->commentaire->setIdMesure($this->mesure->getIdMesure());
        $this->commentaire->setIdUser($this->getUser()->getGuardUser()->getId());
        $this->form = new commentaireForm($this->commentaire);
    }
    
    public function executeCreateCommentaireMesure(sfWebRequest $request)
    {
        $this->forward404Unless($request->isMethod(sfRequest::POST));

        $this->forward404Unless($this->mesure = Doctrine_Core::getTable('mesure')->find(array($request->getParameter('id_mesure'))), sprintf('Object mesure does not exist (%s).', $request->getParameter('id_mesure')));
        
        $this->lot = $this->mesure->getEchantillon()->getLot();
        // On vérifie que l'utilisateur a les droits d'écriture sur le lot concerné
        $this->droitEcriture();
        
        $this->commentaire = new Commentaire();
        $this->commentaire->setIdMesure($this->mesure->getIdMesure());
        $this->commentaire->setIdUser($this->getUser()->getGuardUser()->getId());
        $this->form = new commentaireForm($this->commentaire);

        $this->processFormCommentaireMesure($request, $this->form);

        $this->setTemplate('newCommentaireMesure');
    }
    
    protected function processFormCommentaireMesure(sfWebRequest $request, sfForm $form)
    {
        $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
        if ($form->isValid())
        {
            if($form->getObject()->isNew()) $new = true; else $new = false;
            
            $commentaire = $form->save();
            if($new == true)
            {
                $commentaire->setCreatedAt(date('Y-m-d H:i:s', time()));
                $commentaire->setIdUser($this->getUser()->getGuarduser()->getId());
                $commentaire->setIdMesure($this->mesure->getIdMesure());
            }
            $commentaire->setUpdatedAt(date('Y-m-d H:i:s', time()));
            $commentaire->save();


            $this->redirect('mesure/show?id_mesure='.$this->mesure->getIdMesure());
        }
    }
    
    

    public function executeEdit(sfWebRequest $request)
    {
        $this->forward404Unless($this->commentaire = Doctrine_Core::getTable('commentaire')->find(array($request->getParameter('id_commentaire'))), sprintf('Object commentaire does not exist (%s).', $request->getParameter('id_commentaire')));
        $this->form = new commentaireForm($this->commentaire);
        
        // On vérifie que l'utilisateur a les droits d'écriture sur le lot concerné
//        if($this->commentaire->getIdLot())
//        {
//            $this->lot = $this->commentaire->getLot();
//        }
//        elseif($this->commentaire->getIdEchantillon())
//        {
//            $this->lot = $this->commentaire->getEchantillon()->getLot(); 
//        }
//        elseif($this->commentaire->getIdTraitement())
//        {
//            $this->lot = $this->commentaire->getTraitement()->getLotParent();
//        }
//        elseif($this->commentaire->getIdMesure())
//        {
//            $this->lot = $this->commentaire->getMesure()->getEchantillon()->getLot(); 
//        }
        $this->lot = $this->commentaire->getLotParent();
        // On vérifie que l'utilisateur a les droits d'écriture sur le lot concerné
        $this->droitEcriture();
    }

    public function executeUpdate(sfWebRequest $request)
    {
        $this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT));
        $this->forward404Unless($this->commentaire = Doctrine_Core::getTable('commentaire')->find(array($request->getParameter('id_commentaire'))), sprintf('Object commentaire does not exist (%s).', $request->getParameter('id_commentaire')));
        
        // On vérifie que l'utilisateur a les droits d'écriture sur le lot concerné
        $this->lot = $this->commentaire->getLotParent();
        $this->droitEcriture();
        $this->lot = null;
        
        $this->form = new commentaireForm($this->commentaire);

        if($this->commentaire->getIdLot())
        {
            $this->lot = $this->commentaire->getLot();
            $this->processFormCommentaireLot($request, $this->form);
        }
        elseif($this->commentaire->getIdEchantillon())
        {
            $this->echantillon = $this->commentaire->getEchantillon();
            $this->processFormCommentaireEchantillon($request, $this->form);
        }
        elseif($this->commentaire->getIdTraitement())
        {
            $this->traitement = $this->commentaire->getTraitement();
            $this->processFormCommentaireTraitement($request, $this->form);
        }
        elseif($this->commentaire->getIdMesure())
        {
            $this->mesure = $this->commentaire->getMesure();
            $this->processFormCommentaireMesure($request, $this->form);
        }

        $this->setTemplate('edit');
    }

    public function executeDelete(sfWebRequest $request)
    {
        //$request->checkCSRFProtection();

        $this->forward404Unless($this->commentaire = Doctrine_Core::getTable('commentaire')->find(array($request->getParameter('id_commentaire'))), sprintf('Object commentaire does not exist (%s).', $request->getParameter('id_commentaire')));
        
        // On vérifie que l'utilisateur a les droits d'écriture sur le lot concerné
        $this->lot = $this->commentaire->getLotParent();
        $this->droitEcriture();
        
        if($this->commentaire->getIdLot())
        {
            $url = 'lot/show?id_lot='.$this->commentaire->getIdLot();
        }
        elseif($this->commentaire->getIdEchantillon())
        {
            $url = 'echantillon/show?id_echantillon='.$this->commentaire->getIdEchantillon();
        }
        elseif($this->commentaire->getIdTraitement())
        {
            $url = 'traitement/show?id_traitement='.$this->commentaire->getIdTraitement();
        }
        elseif($this->commentaire->getIdMesure())
        {
            $url = 'mesure/show?id_mesure='.$this->commentaire->getIdMesure();
        }
        
        $this->commentaire->delete();

        $this->redirect($url);
    }
// A supprimer
//    protected function processForm(sfWebRequest $request, sfForm $form)
//    {
//        $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
//        if ($form->isValid())
//        {
//        $commentaire = $form->save();
//
//        $this->redirect('commentaire/edit?id_commentaire='.$commentaire->getIdCommentaire());
//        }
//    }
}
